python tkinter 动态创建下拉菜单,根据菜单传递不同参数

您所在的位置:网站首页 tkinter command执行不同命令 python tkinter 动态创建下拉菜单,根据菜单传递不同参数

python tkinter 动态创建下拉菜单,根据菜单传递不同参数

2023-10-10 01:09| 来源: 网络整理| 查看: 265

最近一直在tkinter 的这个坑里。动态创建一个下拉菜单。选择菜单传递不同参数。 一晚上试lambda 语句为什么只传最后一个菜单选项的参数。 最后狂搜一番,发现一个解决的方法。使用了使用functools.partial代替lambda。 只是为了验证可行性的一个程序。逻辑比较乱。重要的实现自己需要的功能。 不停的试,为什么不能实现,有部分没用的语句。懒得删了。 前半部分获取要要创建菜单需要的数据。 后半部分的类实现下拉菜单的语句。 菜单界面

import json import requests import os, sys #Usage:showinfo/warning/error,askquestion/okcancel/yesno/retrycancel from tkinter.messagebox import * from tkinter import * from tkinter.font import Font from tkinter.ttk import * #Usage:showinfo/warning/error,askquestion/okcancel/yesno/retrycancel from tkinter.messagebox import * #Usage:f=tkFileDialog.askopenfilename(initialdir='E:/Python') #import tkinter.filedialog as tkFileDialog #import tkinter.simpledialog as tkSimpleDialog #askstring() from functools import partial def get_tag(): #酷我精选歌单分类, ua={ 'User-Agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36', 'Referer':'http://www.kuwo.cn/playlists', 'Cookie':'_ga=GA1.2.2002589455.1638772916; _gid=GA1.2.1373314839.1640043589; Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1640043589,1640048527,1640055047,1640136554; Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1640136554; kw_token=TJSNCNONXJQ', 'csrf': 'TJSNCNONXJQ', } url=r'http://www.kuwo.cn/api/www/playlist/getTagList?httpsStatus=1&reqId=acb0bb81-7472-11ec-8913-ff3c3ddd55c5' try: response=requests.get(url,headers=ua,timeout=30) #print (response.text) if response.status_code==200: jsdata=response.json() #print (jsdata) rcm=jsdata['data'] tag_data=[] for d in rcm: tag_data.append(d) #print (tag_data) except Exception as e: print ("获取歌单分类:{} 时错误".format(e)) return (tag_data) a=get_tag() global item_menu item_menu=[] for m in a: item_menu.append((m['name'],m['data'])) class Application_ui(Frame): #这个类仅实现界面生成功能,具体事件处理代码在子类Application中。 def __init__(self, master=None): Frame.__init__(self, master) self.master.title('三的菜单动态学习)') self.master.geometry('800x600') self.showmenu() def showmenu(self): global item_menu self.top = self.winfo_toplevel() self.style = Style() name_id={} self.MainMenu = Menu(self.top, tearoff=0) for i,item in enumerate(item_menu): if i==6: break name,data = item locals()['i' + str(i)] = Menu(self.MainMenu,tearoff=0) for d in data: #print (name,d['name'],d['id']) name_id[d['name']]=d['id'] cmd=partial(self.m_click, d['name'],d['id']) locals()['i' + str(i)].add_command(label=d['name'],command=cmd ) self.MainMenu.add_cascade(menu=locals()['i' + str(i)], label=name) self.top['menu'] = self.MainMenu class Application(Application_ui): #这个类实现具体的事件处理回调函数。界面生成代码在Application_ui中。 def __init__(self, master=None): Application_ui.__init__(self, master) def m_click(self,tag,id): print (tag,id) if __name__ == "__main__": top = Tk() app=Application(top).mainloop()


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3